home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / stdwin / Tools / getopt.c < prev    next >
Text File  |  1995-12-21  |  2KB  |  83 lines

  1. /*LINTLIBRARY*/
  2.  
  3. #include "configure.h"
  4.  
  5. #ifdef THINK_C
  6. #define SYSV
  7. #endif
  8.  
  9. #ifdef SYSV
  10. #define index strchr
  11. #endif
  12.  
  13. #ifdef unix
  14. #define NULL    0
  15. #define EOF    (-1)
  16. #define ERR(s, c)    if(opterr){\
  17.     extern int strlen(), write();\
  18.     char errbuf[2];\
  19.     errbuf[0] = c; errbuf[1] = '\n';\
  20.     (void) write(2, argv[0], (int)strlen(argv[0]));\
  21.     (void) write(2, s, (int)strlen(s));\
  22.     (void) write(2, errbuf, 2);}
  23. #else
  24. /* Not unix -- assume <stdio.h> works, don't expect write(2). */
  25. #include <stdio.h>
  26. #define ERR(str, chr)    if(opterr){\
  27.     fprintf(stderr, "%s%s%c\n", argv[0], str, chr); }
  28. #endif
  29.  
  30. extern int strcmp();
  31. extern char *index();
  32.  
  33. int    opterr = 1;
  34. int    optind = 1;
  35. int    optopt;
  36. char    *optarg;
  37.  
  38. int
  39. getopt(argc, argv, opts)
  40. int    argc;
  41. char    **argv, *opts;
  42. {
  43.     static int sp = 1;
  44.     register int c;
  45.     register char *cp;
  46.  
  47.     if(sp == 1)
  48.         if(optind >= argc ||
  49.            argv[optind][0] != '-' || argv[optind][1] == '\0')
  50.             return(EOF);
  51.         else if(strcmp(argv[optind], "--") == 0) {
  52.             optind++;
  53.             return(EOF);
  54.         }
  55.     optopt = c = argv[optind][sp];
  56.     if(c == ':' || (cp=index(opts, c)) == NULL) {
  57.         ERR(": illegal option -- ", c);
  58.         if(argv[optind][++sp] == '\0') {
  59.             optind++;
  60.             sp = 1;
  61.         }
  62.         return('?');
  63.     }
  64.     if(*++cp == ':') {
  65.         if(argv[optind][sp+1] != '\0')
  66.             optarg = &argv[optind++][sp+1];
  67.         else if(++optind >= argc) {
  68.             ERR(": option requires an argument -- ", c);
  69.             sp = 1;
  70.             return('?');
  71.         } else
  72.             optarg = argv[optind++];
  73.         sp = 1;
  74.     } else {
  75.         if(argv[optind][++sp] == '\0') {
  76.             sp = 1;
  77.             optind++;
  78.         }
  79.         optarg = NULL;
  80.     }
  81.     return(c);
  82. }
  83.